package com.shijie.sjoj.model.component.validate;

/**
 * 数字类型校验
 *
 * @author ZSJ
 */
public class NumberValidate {

    /**
     * 零值边界值，也是默认值
     */
    public static final Long ZERO_BOARD = 0L;

    /**
     * 系统边界值，redis全局id生成器理论最小值：（1L << 32 | 1L）=4294967297L
     */
    public static final Long SYS_BOARD = 4294967297L;

    /**
     * 默认的最小边界值的无效值校验
     *
     * @param value    待验证值
     * @param minBoard 最小边界值
     * @return boolean
     */
    public static boolean invalid(Long value, Long minBoard) {
        return null == value || null == minBoard || value < minBoard;
    }

    /**
     * 默认的最小边界值的无效值校验
     *
     * @param value    待验证值
     * @param minBoard 最小边界值
     * @return boolean
     */
    public static boolean invalid(Integer value, Integer minBoard) {
        return null == value || null == minBoard || value < minBoard;
    }

    /**
     * 默认的双边（最小及最大）边界值的无效值校验
     *
     * @param value    待验证值
     * @param minBoard 最小边界值
     * @param maxBoard 最大边界值
     * @return boolean
     */
    public static boolean invalid(Long value, Long minBoard, Long maxBoard) {
        return null == value || null == minBoard || null == maxBoard || value < minBoard || value > maxBoard;
    }

    /**
     * 默认的双边（最小及最大）边界值的无效值校验
     *
     * @param value    待验证值
     * @param minBoard 最小边界值
     * @param maxBoard 最大边界值
     * @return boolean
     */
    public static boolean invalid(Integer value, Integer minBoard, Integer maxBoard) {
        return null == value || null == minBoard || null == maxBoard || value < minBoard || value > maxBoard;
    }

    /**
     * 零值的最小边界无效值校验
     *
     * @param value 待验证值
     * @return boolean
     */
    public static boolean invalidZero(Long value) {
        return null == value || value < ZERO_BOARD;
    }

    /**
     * 零值的最小边界无效值校验
     *
     * @param value 待验证值
     * @return boolean
     */
    public static boolean invalidZero(Integer value) {
        return null == value || value < ZERO_BOARD;
    }

    /**
     * 系统的最小边界无效值校验
     *
     * @param value 待验证值
     * @return boolean
     */
    public static boolean invalidSys(Long value) {
        return null == value || value < SYS_BOARD;
    }

    /**
     * 默认的最小边界值的有效值校验
     *
     * @param value    待验证值
     * @param minBoard 最小边界值
     * @return boolean
     */
    public static boolean valid(Long value, Long minBoard) {
        return !invalid(value, minBoard);
    }

    /**
     * 默认的最小边界值的有效值校验
     *
     * @param value    待验证值
     * @param minBoard 最小边界值
     * @return boolean
     */
    public static boolean valid(Integer value, Integer minBoard) {
        return !invalid(value, minBoard);
    }

    /**
     * 默认的双边（最小及最大）边界值的有效值校验
     *
     * @param value    待验证值
     * @param minBoard 最小边界值
     * @param maxBoard 最大边界值
     * @return boolean
     */
    public static boolean valid(Long value, Long minBoard, Long maxBoard) {
        return !invalid(value, minBoard, maxBoard);
    }

    /**
     * 默认的双边（最小及最大）边界值的有效值校验
     *
     * @param value    待验证值
     * @param minBoard 最小边界值
     * @param maxBoard 最大边界值
     * @return boolean
     */
    public static boolean valid(Integer value, Integer minBoard, Integer maxBoard) {
        return !invalid(value, minBoard, maxBoard);
    }

    /**
     * 零值的最小边界有效值校验
     *
     * @param value 待验证值
     * @return boolean
     */
    public static boolean validZero(Long value) {
        return !invalidZero(value);
    }

    /**
     * 零值的最小边界有效值校验
     *
     * @param value 待验证值
     * @return boolean
     */
    public static boolean validZero(Integer value) {
        return !invalidZero(value);
    }

    /**
     * 系统的最小边界有效值校验
     *
     * @param value 待验证值
     * @return boolean
     */
    public static boolean validSys(Long value) {
        return !invalidSys(value);
    }


}
